//给定一个整数数组 arr，如果它是有效的山脉数组就返回 true，否则返回 false。
//
// 让我们回顾一下，如果 arr 满足下述条件，那么它是一个山脉数组：
//
//
// arr.length >= 3
// 在 0 < i < arr.length - 1 条件下，存在 i 使得：
//
// arr[0] < arr[1] < ... arr[i-1] < arr[i]
// arr[i] > arr[i+1] > ... > arr[arr.length - 1]
//
//
//
//
//
//
//
//
//
// 示例 1：
//
//
//输入：arr = [2,1]
//输出：false
//
//
// 示例 2：
//
//
//输入：arr = [3,5,5]
//输出：false
//
//
// 示例 3：
//
//
//输入：arr = [0,3,2,1]
//输出：true
//
//
//
// 提示：
//
//
// 1 <= arr.length <= 10⁴
// 0 <= arr[i] <= 10⁴
//
//
// Related Topics 数组与矩阵 👍 206 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
function validMountainArray(arr: number[]): boolean {
    // 即先严格递增再严格递减出现最大值  没有平峰
    // 还要考虑只有单增和单减的情况
    if (arr.length < 3) return false
    let up : boolean = true
    for (let i = 0; i < arr.length - 1; i ++) {
        if (up) {
            // 开始下坡
            if (arr[i] > arr[i + 1]) {
                // 直接下坡的情况
                if (i === 0) return false
                up = false
            }
            // 出现平坡 false
            else if (arr[i] === arr[i + 1]) return false
        }
        else {
            // 已经开始下坡 没有回头路 平坡和上坡都false
            if (arr[i] <= arr[i + 1]) {
                return false
            }
        }
    }
    // 没有下坡的情况考虑
    return up !== true
};
//leetcode submit region end(Prohibit modification and deletion)
